#include "header.h"

int main()
{
    // 实现贡献内存, 客户给服务端打印消息, 服务端打印收到的消息
    // 1. 先获取一个共享内存段的唯一标识 key
    key_t key = ftok("/home/shit", 8888888);
    // 2. 再申请共享内存, 返回这块共享内存的 id
    int shmid = shmget(key, 2048, IPC_CREAT);       // 申请的大小尽量是 4KB 的倍数
    // 3. 和当前进程的虚拟地址空间建立关系
    //           nullptr 表示不关心挂靠的虚拟地址的位置, 0 表示默认读写权限
    //    转化成 char* 类型
    char* address = (char*) shmat(shmid, nullptr, 0);
    // 4. 开始通信
    while (true) {
        // 从键盘中获取数据, 也就是 0 号文件描述符
        // 返回实际上读取到的数据, 参数的 2048 表示：读取到的数据最多不超过 2048 字节
        cout << "请输入数据：" ;
        fflush(stdout);
        if (fgets(address, 2048, stdin) != NULL) {   // 读取正常
            cout << "客户写入数据成功" << endl;
        }
    }

    // 5. 取消挂靠
    shmdt((void*) address);
    return 0;
}